package elion.com.theElion.utils;


import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Alex on 2017/6/9.
 */

public class JsonUtils {
    /**
     * @param className 要生成的bean类名
     * @param json      json字符串
     * @return className类型的链表
     * @throws Exception
     */
    public static List<Object> jsonToList(String className, String json) throws Exception {
        //获取字段名
        String[] names = ReflectUtil.getFieldsNames(className);
        //新实例
        Object obj;
        JSONObject object;
        //实例列表
        List<Object> list = new ArrayList<>();
        try {
            //Json数组
            JSONArray array = new JSONArray(json);
            //Json解析
            for (int i = 0; i < array.length(); i++) {
                obj = Class.forName(className).newInstance();
                object = array.getJSONObject(i);
                obj = jsonToData(obj, names, object);
                list.add(obj);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List jsonToList(Object obj, String json) throws Exception {
        String className = obj.getClass().getName();
        return jsonToList(className, json);
    }

    /**
     * @param obj    需要设置参数的对象
     * @param names  对象的字段名
     * @param object JSONObject
     * @return 参数设置完成的对象
     * @throws Exception
     */
    private static Object jsonToData(Object obj, String[] names, JSONObject object) throws Exception {
        Log.e("TAG", "LOG CLASS:JsonUtils");
        String data;
//        Log.e( "jsonToData", object.toString());
        for (String str : names) {
            if (!"CREATOR".equals(str)) {
                data = object.getString(str);
                Log.d("TAG", str + " : " + data);
                ReflectUtil.useSetMethod(obj, str, data);
            }
        }
        return obj;
    }
}
